package com.zenithmind.task.pojo.dto;

import lombok.Data;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 任务更新DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
public class TaskUpdateDTO {

    /**
     * 任务ID
     */
    @NotBlank(message = "任务ID不能为空")
    private String id;

    /**
     * 任务标题
     */
    @Size(max = 200, message = "任务标题长度不能超过200个字符")
    private String title;

    /**
     * 任务描述
     */
    @Size(max = 2000, message = "任务描述长度不能超过2000个字符")
    private String description;

    /**
     * 任务状态：1-待办，2-进行中，3-已完成，4-已取消，5-已暂停
     */
    private Integer status;

    /**
     * 优先级：1-低，2-中，3-高，4-紧急
     */
    private Integer priority;

    /**
     * 任务类型：1-个人任务，2-团队任务，3-项目任务
     */
    private Integer taskType;

    /**
     * 任务分类ID
     */
    private String categoryId;

    /**
     * 任务标签列表
     */
    private List<String> tagList;

    /**
     * 负责人ID
     */
    private String assigneeId;

    /**
     * 项目ID
     */
    private String projectId;

    /**
     * 计划开始时间
     */
    private LocalDateTime plannedStartTime;

    /**
     * 计划结束时间
     */
    private LocalDateTime plannedEndTime;

    /**
     * 预估工时（小时）
     */
    private BigDecimal estimatedHours;

    /**
     * 实际工时（小时）
     */
    private BigDecimal actualHours;

    /**
     * 任务进度（0-100）
     */
    private Integer progress;

    /**
     * 是否重要
     */
    private Integer isImportant;

    /**
     * 是否紧急
     */
    private Integer isUrgent;

    /**
     * 是否重复任务
     */
    private Integer isRecurring;

    /**
     * 重复规则（JSON格式）
     */
    private String recurrenceRule;

    /**
     * 提醒时间
     */
    private LocalDateTime reminderTime;

    /**
     * 提醒方式：1-系统通知，2-邮件，3-短信，4-微信
     */
    private Integer reminderType;

    /**
     * 自定义字段（JSON格式）
     */
    private String customFields;

    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500个字符")
    private String remark;
}
